# Makefile for HTTP Download Library - 支持交叉编译版本

# 默认编译器
CC = gcc

# 交叉编译器前缀（可通过命令行覆盖，如：make CROSS_COMPILE=arm-linux-gnueabihf-）
CROSS_COMPILE ?= 

# 设置实际使用的编译器
CC := $(CROSS_COMPILE)$(CC)

# 默认编译选项
CFLAGS = -Wall -Wextra -O2 -std=c99

# 默认链接选项
LDFLAGS = 

# 目标文件
TARGET = test_download

# 源文件
SRCS = http_download.c test_download.c

# 头文件
HDRS = http_download.h

# 目标规则
all: $(TARGET)

# 通用编译规则
$(TARGET): $(SRCS) $(HDRS)
	$(CC) $(CFLAGS) -o $@ $(SRCS) $(LDFLAGS)

# Linux平台编译
linux: CFLAGS += -D_LINUX
linux: LDFLAGS += -lpthread
linux: $(TARGET)

# Windows平台编译
windows: CC = gcc
windows: CFLAGS += -D_WIN32
windows: LDFLAGS += -lws2_32
windows:
	$(CC) $(CFLAGS) -o $(TARGET).exe $(SRCS) $(LDFLAGS)

# 嵌入式ARM平台编译（通用）
arm: CFLAGS += -D_EMBEDDED -D_ARM
arm: $(TARGET)

# ARM Cortex-A系列优化编译
arm-cortex-a: CFLAGS += -D_EMBEDDED -D_ARM -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard
arm-cortex-a: $(TARGET)

# ARM Cortex-M系列优化编译（无FPU）
arm-cortex-m: CC = $(CROSS_COMPILE)gcc
arm-cortex-m: CFLAGS += -D_EMBEDDED -D_ARM -mthumb -mcpu=cortex-m4 -mfloat-abi=soft -Os
arm-cortex-m: LDFLAGS += --specs=nosys.specs
arm-cortex-m: $(TARGET)

# RISC-V平台编译
riscv: CC = $(CROSS_COMPILE)gcc
riscv: CFLAGS += -D_EMBEDDED -D_RISCV
riscv: $(TARGET)

# RISC-V 32位平台优化编译
riscv32: CC = $(CROSS_COMPILE)gcc
riscv32: CFLAGS += -D_EMBEDDED -D_RISCV -march=rv32imac -mabi=ilp32
riscv32: $(TARGET)

# RISC-V 64位平台优化编译
riscv64: CC = $(CROSS_COMPILE)gcc
riscv64: CFLAGS += -D_EMBEDDED -D_RISCV -march=rv64imac -mabi=lp64
riscv64: $(TARGET)

# 调试模式编译
debug: CFLAGS += -g -O0 -DDEBUG
debug: $(TARGET)

# 静态链接编译
static: LDFLAGS += -static
static: $(TARGET)

# 清理规则
clean:
	-rm -f $(TARGET) $(TARGET).exe *.o

# 清理所有编译产物（包括临时文件）
clean-all: clean
	-rm -rf .dist

# 运行测试程序（仅在主机环境）
run: $(TARGET)
	./$(TARGET)

# 安装到系统（可选）
install: $(TARGET)
	mkdir -p .dist
	cp $(TARGET) .dist/

# 显示编译配置
config:
	@echo "Current build configuration:" 
	@echo "  CC: $(CC)"
	@echo "  CFLAGS: $(CFLAGS)"
	@echo "  LDFLAGS: $(LDFLAGS)"

# 伪目标
.PHONY: all clean clean-all run install config linux windows arm arm-cortex-a arm-cortex-m riscv riscv32 riscv64 debug static